package com.intretech.umsin.datasource.codemapping.annotations;

import org.springframework.core.annotation.AliasFor;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @version V1.0
 * @EnumName: DoMapping
 * @Description:(DoMapping 对方法返回的值启用[码-名]映射 对应提供的注解)
 * @author: 李启联
 * @date: 2020-03-16 10:04
 * @Copyright: Copyright (c) 2020
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface DoMapping {

    /**
     * 该标注指定需要"码名"映射实体对象类型
     * @return
     */
      Class rootClass() default Object.class;


    /**
     * 码-名映射配置列表<br/>
     * 如果在对应返回对象的实体"码名"属性中设置了@CodeMappingConfig则可以不设置该属性，
     * 如果该CodeMappingConfig[] 一旦设置了，则对应对象的实体中的CodeMappingConfig失效
     */
     @AliasFor("configs")
     CodeMappingConfig[] value() default {};


    /**
     * 码-名映射配置列表<br/>
     * 如果在对应返回对象的实体"码名"属性中设置了@CodeMappingConfig则可以不设置该属性，
     * 如果该CodeMappingConfig[] 一旦设置了，则对应对象的实体中的CodeMappingConfig失效
     */
     @AliasFor("value")
     CodeMappingConfig[] configs() default {};

    /**
     * 是否开启[码-名]映射 默认为开启
     * @return
     */
     boolean doMapping() default true;


    /**
     * 该标注指定需要"码名"映射实体对象类全名.<br/>
     * 这属性和 rootClass()属性二选一,如果设置了targetClass()属性则无需设置该属性。<br/>
     * 一般情况是在编译期未引入实体对象时设置该值来替代rootClassName()属性<br/>
     * @return
     */
    String rootClassName() default "";

}
